package icu.d4peng.cloud.common.core.vo;

import com.alibaba.fastjson.JSON;

/**
 * @author d4peng
 * @version 1.0.0
 * @date 2021-12-24 09:44
 * @description ResultVO:基础结果视图集(单条数据, 或者没有数据)
 */
public class ResultVO<T> extends BaseVO {
    /**
     * 结果
     */
    private T data;

    /**
     * 构造器
     *
     * @param code    状态码
     * @param message 信息
     * @param data    数据
     */
    public ResultVO(Integer code, String message, T data) {
        super(code, message);
        this.data = data;
    }

    /**
     * 静态构建
     *
     * @param code    状态码
     * @param message 信息
     * @param data    数据
     * @param <D>     泛型
     * @return 结果视图
     */
    public static <D> ResultVO<D> build(Integer code, String message, D data) {
        return new ResultVO<>(code, message, data);
    }

    /**
     * 静态构建(失败)
     *
     * @param data 数据
     * @param <D>  泛型
     * @return 结果视图
     */
    public static <D> ResultVO<D> fail(D data) {
        return build(400, "Bad Request", data);
    }

    /**
     * 静态构建(成功)
     *
     * @param data 数据
     * @param <D>  泛型
     * @return 结果视图
     */
    public static <D> ResultVO<D> success(D data) {
        return build(200, "OK", data);
    }

    public T getData() {
        return data;
    }

    public ResultVO<T> setData(T data) {
        this.data = data;
        return this;
    }

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}